package org.simple.framework.service.flow.executor;

import com.simple.framework.infrastructure.pojo.FlowExecutionContext;

/**
 * 提供默认保存步骤执行相关数据的操作
 * 
 * @author wujiangpo
 *
 */
public abstract class AbstractFlowExecutor implements FlowExecutor {

	@Override
	public void process(FlowExecutionContext context) {
		beforFlowStart(context);
		try {
			subExec(context);
		} catch (Exception e) {
			afterFlowExecException(context);
		}
		afterFlowEnd(context);
	}

	protected void beforFlowStart(FlowExecutionContext context) {
		// TODO 流程执行前相关工作
	}

	protected void afterFlowEnd(FlowExecutionContext context) {
		// TODO流程执行完成前相关工作
	}

	protected void afterFlowExecException(FlowExecutionContext context) {
		if (context.getCanRetry()) {
			// 可重试的操作，比如存表
		}
		// TODO流程执行异常后相关工作
	}

	protected abstract void subExec(FlowExecutionContext context);
}
